import store from '@/store'
import { getTimestamp, getUUID, QRcodeCode } from '@/utils/validate';

const dappName = 'Newdex'; // dapp名字，用于在钱包APP中展示，可选
const dappIcon = 'https://ndi.340wan.com/i.png'; // dapp图标Url，用于在钱包APP中展示，可选
const uuID = `web-${getUUID()}`; // uuID, 1 代表web
const simple = {
  init: (async (params, tag, vthis) => {
    /**
     * @params {fromAccount,toAccount, amount,contract,symbol,precision, memo}
     * @tag 标签
     * @vthis vue实例
     */
    const back = await simple.code(params, tag, vthis);
    return back;
  }),
  config: ((params) => {
    const sapp = store.state.app;
    const scat = sapp.scatter;
    const postUrl = `${window.location.origin}/api/tc?uuid=${uuID}`; // 钱包回调;
    const config = {
      protocol: 'SimpleWallet', // 协议名，钱包用来区分不同协议，本协议为 SimpleWallet
      version: '1.0', // 协议版本信息，如1.0
      dappName,
      dappIcon,
      action: 'transfer', // 支付时，赋值为transfer，必须
      from: params.fromAccount, // 付款人的EOS账号，可选
      to: params.toAccount, // 收款人的EOS账号，必须
      amount: params.amount, // 转账数量，必须
      contract: params.contract, // 转账的token所属的contract合约账号名，必须
      symbol: params.symbol, // 转账的token名称，必须
      precision: params.precision, // 转账的token的精度，小数点后面的位数，必须
      dappData: params.memo, // 由dapp生成的业务参数信息，需要钱包在转账时附加在memo中发出去，格式为:k1=v1&k2=v2，可选
      // desc: '', // 交易的说明信息，钱包在付款UI展示给用户，最长不要超过128个字节，可选
      expired: params.overdueTimestamp + 300, // 二维码过期时间，unix时间戳
      callback: postUrl, // 用户完成操作后，钱包回调拉起dapp移动端的回调URL,如https://abc.com?action=login&qrcID=123，可选
      // callbackUrl: postUrl,
      // blockchain: 'eos', // 指定节点
    }
    if (scat.wallet === 'TokenPocket') {
      config.callbackUrl = postUrl
    }
    return config;
  }),
  code: ((obj, tag, vthis) =>
    new Promise((resolve, reject) => {
      getTimestamp((timestamp) => {
        const params = obj;
        params.overdueTimestamp = timestamp;
        const config = simple.config(params);
        config.expired = Math.floor(timestamp / 1000) + 300; // 更新过期时间
        const codeData = JSON.stringify(config);
        // const tag = document.getElementById('payCode');
        QRcodeCode(codeData, tag, 240, (err) => {
          if (err) {
            vthis.$message.error(vthis.$t('jy.codeError'));
            reject({ code: 1001 });
          }
          resolve({
            code: 0,
            uuID,
            overdueTimestamp: timestamp
          });
        })
      });
    })
  )
}
export default simple;
